import axios from 'axios';

const baseURL = 'http://192.168.50.45:8090'

// 创建 axios 实例
const service = axios.create({
  baseURL: baseURL, //process.env.VUE_APP_BASE_API || import.meta.env.VITE_APP_BASE_API, // 基础路径，适用于 Vue CLI 或 Vite
  timeout: 10000, // 超时设置
  headers: {
    'Content-Type': 'application/json;charset=UTF-8',
    'X-Requested-With': 'XMLHttpRequest', // 跨域必备头部
  }
});

// 请求拦截器
service.interceptors.request.use(
  config => {
    // 你可以在这里统一处理请求，例如添加 token
    const token = localStorage.getItem('token');
    if (token) {
      config.headers['Authorization'] = `Bearer ${token}`; // 如果存在 token，添加到请求头
    }
    return config;
  },
  error => {
    // 请求错误时的统一处理
    console.error('请求错误:', error);
    return Promise.reject(error);
  }
);

// 响应拦截器
service.interceptors.response.use(
  response => {
    // 对响应数据进行处理
    const res = response.data;
    /* // 判断 API 响应状态码，假设 200 为正常返回
    if (res.code !== 200) {
      // 自定义错误处理，例如 token 失效，权限问题等
      if (res.code === 401) {
        console.error('Unauthorized, please log in again.');
        // 可以在这里执行登出逻辑，跳转到登录页面等
      }
      return Promise.reject(new Error(res.message || 'Error'));
    } else {
      return res;
    } */
    return res;
  },
  error => {
    // 处理 HTTP 错误状态码，例如 500，404 等
    console.error('响应错误:', error);
    return Promise.reject(error);
  }
);

/**
 * 封装常见的 HTTP 方法
 * @param {string} url 请求的 URL
 * @param {string} method 请求方法：GET, POST, PUT, DELETE
 * @param {Object} params GET 请求的查询参数
 * @param {Object} data POST/PUT/DELETE 请求的 body 数据
 * @param {Object} headers 自定义请求头
 */
export default function request({ url, method = 'GET', params = {}, data = {}, headers = {} }) {
  const config = {
    url,
    method: method.toUpperCase(), // 转换为大写保证兼容性
    headers
  };

  // 如果是 GET 请求，使用 `params`，否则使用 `data`
  if (method.toUpperCase() === 'GET') {
    config.params = params; // GET 请求的参数放在 `params`
  } else {
    config.data = data; // POST, PUT, DELETE 请求的参数放在 `data`
  }

  return service(config);
}
